#include <boost/asio.hpp>
#include <iostream>

#include "ITCPClient.h"



/// \brief 通信(TCP)客户端通报类
class DemoClient : public ITCPClientNotify
{
public:
  DemoClient();
  virtual ~DemoClient();
  void Init();

	/*
		注意：由于线程时序的原因，有可能出现OnRecvServerData，先于OnConnectServer被调用的情况，
		如有同步需求，请在回调函数内自行处理。
	*/
	/// \brief 连接服务器回调函数，由nStatus指定连接是否成功。
	virtual void OnConnectServer(int nStatus);

	/// \brief 从服务器接收到数据回调(回调函数应复制数据后，立即返回，否则影响接收效率，MDF方式阻塞时间不得超过15s，否则断线)
	/// \param pbData 数据指针(函数调用后即释放，勿超范围使用，勿在函数中删除)
	/// \param unDataSize 数据大小
	virtual void OnRecvServerData(const unsigned char* pbData, unsigned int unDataSize) {}

	/// \brief 从服务器接收数据异常回调
	virtual void OnServerDataError() {}

	/// \brief Socket连接断开回调
	virtual void OnServerDisconnect(int nStatus) {}

  // 内部消息通知
  ///< 调试信息
  //const EN_EVENT_TYPE WN_REPORT_LEVEL_DEBUG = 0;
  /////< 普通信息
  //const EN_EVENT_TYPE WN_REPORT_LEVEL_INFO = 1;
  /////< 警告信息
  //const EN_EVENT_TYPE WN_REPORT_LEVEL_WARN = 2;
  /////< 错误信息
  //const EN_EVENT_TYPE WN_REPORT_LEVEL_ERROR = 3;
  virtual void OnTCPMsg(int type, std::string msg) {}

private:
  ITCPClient* m_client;
};

